package com.spzx.product.helper;

import com.spzx.product.api.domain.vo.CategoryVo;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class CategoryHelper {
    public static List<CategoryVo> buildTree(List<CategoryVo> categoryVoList) {
        List<CategoryVo> oneCategoryVoList = new ArrayList<>(); //存放一级分类
        if (!CollectionUtils.isEmpty(categoryVoList)) {//判断703条数据都传过来没
            for (CategoryVo vo : categoryVoList) {
                if (vo.getParentId() == 0) {
                    vo = findChildren(vo, categoryVoList);//递归方法，找出各级分类的孩子
                    oneCategoryVoList.add(vo);
                }
            }
        }
        return oneCategoryVoList;//是空直接返回，不是空组装好再返回
    }

    //递归方法，找出各级分类的孩子

    /**
     * 递归找孩子
     *
     * @param vo             当前分类
     * @param categoryVoList 所有分类
     * @return 当前分类（children属性装满孩子）
     */
    private static CategoryVo findChildren(CategoryVo vo, List<CategoryVo> categoryVoList) {
        vo.setChildren(new ArrayList<>()); //孩子集合初始化
        for (CategoryVo categoryVo : categoryVoList) {
            //注意：包装类自动拆箱问题。常量池-128~127
            if (vo.getId().intValue() == categoryVo.getParentId().intValue()) {//找孩子
                categoryVo = findChildren(categoryVo, categoryVoList); //孩子找孩子
                vo.getChildren().add(categoryVo);
            }
        }
        return vo;
    }
}
